package com.demo.java.OD151_200.OD194;

import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【好朋友】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145888913
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();  // 输入学生的数量
        int[] heights = new int[n];
        for (int i = 0; i < n; i++) {
            heights[i] = sc.nextInt();  // 输入每个学生的身高
        }

        int[] result = new int[n];  // 用来存储结果
        Stack<Integer> stack = new Stack<>();  // 栈用于存储学生的下标

        // 遍历身高数组，找出每个学生右侧第一个比自己高的学生
        for (int i = 0; i < n; i++) {
            // 如果栈不为空且当前学生的身高大于栈顶学生的身高
            while (!stack.isEmpty() && heights[i] > heights[stack.peek()]) {
                result[stack.pop()] = i;  // 更新栈顶学生的结果为当前学生下标
            }
            stack.push(i);  // 将当前学生的下标压入栈中
        }

        // 对没有匹配到较高学生的学生，填充 0
        while (!stack.isEmpty()) {
            result[stack.pop()] = 0;  // 栈中的学生没有找到较高学生，输出 0
        }

        // 输出结果
        System.out.println(Arrays.toString(result).replaceAll("[\\[\\],]", ""));
    }
}